export default {
  namespaced: true,
  state() {
    return {
      // 购物车数据数组
      cartItems: JSON.parse(uni.getStorageSync('carts') || '[]'),
    }
  },
  getters: {
    // 1. 商品的总数量
    total(state) {
      return state.cartItems.reduce((sum, item) => sum += item.goods_count, 0)
    },
    // 2. 已经勾选商品的总数量
    checkedTotal(state) {
      let res = 0
      state.cartItems.forEach(item => {
        if (item.goods_state) {
          res += item.goods_count
        }
      })
      return res
    },
    // 3. 计算已勾选商品的总价格
    checkedAmount(state) {
      let res = 0
      state.cartItems.forEach(item => {
        if (item.goods_state) {
          res += item.goods_count * item.goods_price
        }
      })
      return Number(res).toFixed(2)
    }
  },
  mutations: {
    // 1. 添加商品到购物车
    addToCart(state, goods) {
      // 思路: 如果数组中有该商品则购买数量+1, 如果没有, 则往数组中添加该商品
      // 1.1 查找商品
      const oldGoods = state.cartItems.find(item => item.goods_id === goods.goods_id)
      // 1.2 判断
      if (oldGoods) {
        oldGoods.goods_count += 1
      } else {
        state.cartItems.push(goods)
      }
      // 1.3 把购物车的数据持久化到本地
      uni.setStorageSync('carts', JSON.stringify(state.cartItems))
    },
    // 2. 修改商品的选中状态
    changeState(state, goods) {
      // 2.1 找到该商品对象
      const oldGoods = state.cartItems.find(item => item.goods_id === goods.goods_id)
      // 2.2 商品的勾选状态取反
      if (oldGoods) {
        oldGoods.goods_state = !goods.goods_state
        // 2.3 更新本地购物车数据
        uni.setStorageSync('carts', JSON.stringify(state.cartItems))
      }
    },
    // 3. 修改商品的购买数量
    changeCount(state, { goods, count }) {
      // 3.1 找到该商品对象
      const oldGoods = state.cartItems.find(item => item.goods_id === goods.goods_id)
      // 3.2 如果找到
      if (oldGoods) {
        oldGoods.goods_count = count
        // 3.3 更新本地购物车数据
        uni.setStorageSync('carts', JSON.stringify(state.cartItems))
      }
    },
    // 4. 删除一个商品
    deleteGoods(state, goods) {
      state.cartItems = state.cartItems.filter(item => item.goods_id !== goods.goods_id)
      uni.setStorageSync('carts', JSON.stringify(state.cartItems))
    },
    // 5. 全选和反选
    setCheckedAll(state, flag) {
      // 5.1 遍历所有商品
      state.cartItems.forEach(item => item.goods_state = !flag)
      // 5.2 存储到本地
      uni.setStorageSync('carts', JSON.stringify(state.cartItems))
    }
  },
  actions: {}
}